跳到主要内容

昇腾 NPU 环境变量配置指南

最后更新:2026/04/27。

本文档说明在华为昇腾 NPU 上运行 ROLL 时涉及的关键环境变量,涵盖设备管理、HCCL 通信、显存优化、CPU 调度、vLLM-Ascend 推理及调试日志等方面。

ROLL 自动设置的环境变量

ROLL 在运行时自动注入以下环境变量(定义在 roll/platforms/npu.py 中):

变量说明
ASCEND_RT_VISIBLE_DEVICES"0,1,2,3"控制 NPU 设备可见性,类似 GPU 的 CUDA_VISIBLE_DEVICES
RAY_EXPERIMENTAL_NOSET_ASCEND_RT_VISIBLE_DEVICES"1"阻止 Ray 自动覆盖 ASCEND_RT_VISIBLE_DEVICES
VLLM_ALLOW_INSECURE_SERIALIZATION"1"允许 vLLM 使用非安全序列化,用于 Ray 跨进程传输张量
RAY_get_check_signal_interval_milliseconds"1"缩短 Ray plasma lock 持有时间,避免多 Worker 场景下锁饥饿
RAY_CGRAPH_get_timeout"600"Ray 计算图获取超时时间(秒)

Docker 镜像中的环境变量

昇腾 NPU Docker 使用指南 中说明的预构建镜像内,包含以下环境设置:

变量说明
ASCEND_HOME_PATH/usr/local/Ascend/ascend-toolkit/latestCANN 工具包根路径
LD_LIBRARY_PATH包含多个 Ascend lib64 路径动态库搜索路径,确保 libascendcl.so 等可被加载

预构建镜像会通过 /root/.bashrc 自动加载以下 CANN 环境脚本:

source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh

Ray 集群环境变量(多机)

这些变量控制 ROLL 如何在多个 NPU 节点间组建 Ray 集群。它们定义在 roll/distributed/scheduler/driver_utils.py 中,由 roll/distributed/scheduler/initialize.py 消费:

变量默认值说明
RANK0节点编号,0 = 主节点,1, 2, 3... = 工作节点
WORLD_SIZE1集群总节点数
MASTER_ADDR127.0.0.1主节点 IP 地址
MASTER_PORT6379Ray 主节点端口(也是 Ray 默认端口)
DASHBOARD_PORT8265Ray Dashboard Web UI 端口
WORKER_ID<MASTER_ADDR>:<RANK>Ray 集群中的节点名称,未设置时自动生成

RANK=0 时,ROLL 自动执行 ray start --head --port=<MASTER_PORT>。当 RANK>0 时,ROLL 会休眠 5 秒后执行 ray start --address=<MASTER_ADDR>:<MASTER_PORT> 加入集群。所有节点加入后,工作节点退出(sys.exit(0)),仅主节点执行训练流水线。

示例(主节点,在启动流水线前设置):

export RANK=0
export WORLD_SIZE=2
export MASTER_ADDR=10.0.0.1
export MASTER_PORT=6379
export DASHBOARD_PORT=8265

示例(工作节点,在加入前设置):

export RANK=1
export WORLD_SIZE=2
export MASTER_ADDR=10.0.0.1
export MASTER_PORT=6379

你也可以在运行 ROLL 之前手动启动 Ray(ray start --head / ray start --address=...)。ROLL 会检测到已存在的集群并跳过自动启动。

HCCL 通信相关变量

这些变量控制 HCCL(Huawei Collective Communication Library)的行为,HCCL 是 NPU 上的分布式通信后端(等同于 GPU 上的 NCCL):

变量推荐值说明
HCCL_CONNECT_TIMEOUT3600建链超时时间(秒),默认 120 秒,大模型训练场景需增大
HCCL_EXEC_TIMEOUT3600集合通信算子执行超时时间(秒),长步长训练需增大
HCCL_DETERMINISTICfalse关闭确定性计算,开启会显著降低通信性能
HCCL_OP_EXPANSION_MODE"AIV"通信算法展开位置,AIV 使用 Vector Core,性能优于 AI_CPU/HOST/HOST_TS
HCCL_BUFFSIZE"2147483648"HCCL 通信缓冲区大小(字节),大数据量场景可增大
HCCL_IF_IP节点 IP 地址指定 HCCL 跨节点通信使用的 IP 地址,多机训练必需
HCCL_SOCKET_IFNAME"enp194s0f0"HCCL Socket 通信使用的网卡名称,所有节点必须一致
HCCL_IF_BASE_PORT23456HCCL 跨节点通信基础端口,确保端口未被防火墙拦截
HCCL_WHITELIST_DISABLE1禁用 HCCL 白名单检查,某些环境下遇到通信错误时可能需要设置

示例(单机):

export HCCL_CONNECT_TIMEOUT=3600
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"

示例(多机):

export HCCL_CONNECT_TIMEOUT=3600
export HCCL_EXEC_TIMEOUT=3600
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_IF_IP=$(hostname -I | awk '{print $1}')
export HCCL_SOCKET_IFNAME="enp194s0f0"
export HCCL_IF_BASE_PORT=23456

NPU 显存相关变量

变量推荐值说明
NPU_MEMORY_FRACTION0.96NPU 显存可用比例,默认 0.8,大模型推理建议调到 0.95+
PYTORCH_NPU_ALLOC_CONFexpandable_segments:True启用 PyTorch NPU 内存池可扩展段,减少内存碎片和 OOM 风险
MULTI_STREAM_MEMORY_REUSE1多流内存复用,减少显存占用
TASK_QUEUE_ENABLE2任务下发优化,非图模式设为 2,图模式设为 1
COMBINED_ENABLE1启用算子组合优化,将多个小算子融合为一个大算子以减少内核启动开销

示例:

export NPU_MEMORY_FRACTION=0.96
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export MULTI_STREAM_MEMORY_REUSE=1
export TASK_QUEUE_ENABLE=2
export COMBINED_ENABLE=1

CPU 调度相关变量

变量推荐值说明
CPU_AFFINITY_CONF2CPU 绑核优化,避免跨 NUMA 节点内存访问。1=粗粒度,2=细粒度(推荐)
OMP_NUM_THREADS1OpenMP 线程数,分布式训练中建议设为 1 避免过度竞争

示例:

export CPU_AFFINITY_CONF=2
export OMP_NUM_THREADS=1

也支持按 NPU 卡自定义绑核范围:

export CPU_AFFINITY_CONF=1,npu0:0-1,npu1:2-3,npu2:4-5,npu3:6-7

vLLM-Ascend 推理相关变量

变量推荐值说明
VLLM_USE_V11启用 vLLM V1 架构,vLLM-Ascend 必需
VLLM_ATTENTION_BACKENDXFORMERSvLLM 注意力计算后端
VLLM_ASCEND_ENABLE_FLASHCOMM1启用昇腾 FlashComm 高速通信优化
VLLM_ASCEND_ENABLE_DENSE_OPTIMIZE1启用大模型稠密计算优化
VLLM_ASCEND_ENABLE_PREFETCH_MLP1启用 MLP 层权重预取
VLLM_ASCEND_ENABLE_TOPK_OPTIMIZE1启用 TopK 算子融合优化,提升生成解码性能
VLLM_ASCEND_MODEL_EXECUTE_TIME_OBSERVE1打印 prefill/decode 阶段耗时详情(调试用)
VLLM_ASCEND_TRACE_RECOMPILES1追踪算子重编译,用于调试性能问题
VLLM_ENABLE_MC21启用 MC2 通信优化,用于多机推理

示例:

export VLLM_USE_V1=1
export VLLM_ATTENTION_BACKEND=XFORMERS
export VLLM_ASCEND_ENABLE_FLASHCOMM=1
export VLLM_ASCEND_ENABLE_DENSE_OPTIMIZE=1
export VLLM_ASCEND_ENABLE_PREFETCH_MLP=1

CANN 日志与调试变量

变量推荐值说明
ASCEND_GLOBAL_LOG_LEVEL3(ERROR)CANN 日志级别:0=DEBUG, 1=INFO, 2=WARNING, 3=ERROR
ASCEND_SLOG_PRINT_TO_STDOUT1将 CANN 日志输出到标准输出(调试用)
ASDOPS_LOG_LEVELERROR算子库日志级别
ATB_LOG_LEVELERRORATB 加速库日志级别
ASCEND_LAUNCH_BLOCKING1启用同步执行以定位错误。仅在调试 NPU 错误时设为 1,会禁用异步执行并严重降低性能
警告

生产环境中开启 DEBUG/INFO 日志级别会显著降低性能,请务必将日志级别设为 ERROR。

调试示例:

export ASCEND_GLOBAL_LOG_LEVEL=0
export ASCEND_SLOG_PRINT_TO_STDOUT=1
export ASCEND_LAUNCH_BLOCKING=1

生产示例:

export ASCEND_GLOBAL_LOG_LEVEL=3
export ASDOPS_LOG_LEVEL=ERROR
export ATB_LOG_LEVEL=ERROR

CANN 算子编译与精度变量

变量推荐值说明
ACL_OP_COMPILER_CACHE_MODEenable启用算子编译缓存,避免重复运行时重新编译
ACL_OP_COMPILER_CACHE_DIR/tmp/npu_cache算子编译缓存存储目录
ASCEND_MAX_OP_CACHE_SIZE5000最大算子缓存数量,增大可防止长训练中缓存淘汰导致性能下降
ACL_PRECISION_MODEallow_fp32_to_fp16允许不支持的 FP32 算子自动转换为 FP16 精度

示例:

export ACL_OP_COMPILER_CACHE_MODE=enable
export ACL_OP_COMPILER_CACHE_DIR=/tmp/npu_cache
export ASCEND_MAX_OP_CACHE_SIZE=5000
export ACL_PRECISION_MODE=allow_fp32_to_fp16

生产环境推荐配置

单机

多 NPU 分布式 RL 训练场景,建议在启动脚本或 ROLL YAML 配置中添加以下环境变量:

# HCCL 通信
export HCCL_CONNECT_TIMEOUT=3600
export HCCL_EXEC_TIMEOUT=3600
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"

# NPU 显存
export NPU_MEMORY_FRACTION=0.96
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export MULTI_STREAM_MEMORY_REUSE=1
export TASK_QUEUE_ENABLE=2
export COMBINED_ENABLE=1

# CPU 调度
export CPU_AFFINITY_CONF=2
export OMP_NUM_THREADS=1

# vLLM-Ascend 推理
export VLLM_USE_V1=1
export VLLM_ASCEND_ENABLE_FLASHCOMM=1
export VLLM_ASCEND_ENABLE_DENSE_OPTIMIZE=1
export VLLM_ASCEND_ENABLE_PREFETCH_MLP=1

# 算子编译缓存
export ACL_OP_COMPILER_CACHE_MODE=enable
export ACL_OP_COMPILER_CACHE_DIR=/tmp/npu_cache
export ASCEND_MAX_OP_CACHE_SIZE=5000

# 日志(生产环境)
export ASCEND_GLOBAL_LOG_LEVEL=3
export ASDOPS_LOG_LEVEL=ERROR
export ATB_LOG_LEVEL=ERROR

多机

多机训练需在单机配置基础上增加 Ray 集群变量:

# Ray 集群(多机)
export RANK=0 # 0=主节点, 1/2/3=工作节点
export WORLD_SIZE=2 # 集群总节点数
export MASTER_ADDR=10.0.0.1 # 主节点 IP
export MASTER_PORT=6379 # Ray 通信端口
export DASHBOARD_PORT=8265 # Ray Dashboard 端口

# HCCL 多机通信
export HCCL_CONNECT_TIMEOUT=3600
export HCCL_EXEC_TIMEOUT=3600
export HCCL_DETERMINISTIC=false
export HCCL_OP_EXPANSION_MODE="AIV"
export HCCL_IF_IP=$(hostname -I | awk '{print $1}')
export HCCL_SOCKET_IFNAME="enp194s0f0"
export HCCL_IF_BASE_PORT=23456

# ...(其余 NPU 显存、CPU、vLLM、缓存、日志变量同上)

或通过 ROLL YAML 配置:

system_envs:
HCCL_CONNECT_TIMEOUT: "3600"
HCCL_EXEC_TIMEOUT: "3600"
HCCL_DETERMINISTIC: "false"
HCCL_OP_EXPANSION_MODE: "AIV"
HCCL_IF_IP: "10.0.0.1"
HCCL_SOCKET_IFNAME: "enp194s0f0"
HCCL_IF_BASE_PORT: "23456"
NPU_MEMORY_FRACTION: "0.96"
PYTORCH_NPU_ALLOC_CONF: "expandable_segments:True"
CPU_AFFINITY_CONF: "2"
OMP_NUM_THREADS: "1"
COMBINED_ENABLE: "1"
VLLM_USE_V1: "1"
ACL_OP_COMPILER_CACHE_MODE: "enable"
ACL_OP_COMPILER_CACHE_DIR: "/tmp/npu_cache"

声明

ROLL 中提供的 Ascend 支持代码皆为参考样例,生产环境使用请通过官方正式途径沟通。